#include <stdio.h>

int main() {
    int i = 418;

    // 根据上面的表格，我们知道 int* 是指向“整型”的指针，
    // 那么 pi 可以保存的是 int 类型的变量 i 的地址：
    int* pi;
    pi = &i;
    printf("i = %d, pi = %x, &i = %x, *pi = %d, &pi = %x\n", i, pi, &i, *pi, &pi);

    // p 可以保存的是 int* 类型的变量 pi 的地址：
    int** p;
    p = &pi;
    printf("p = %x, *p = %x, **p = %d\n", p, *p, **p);

    // 指针应用
    printf("p + 1 = %p,*p + 1 = %p,*(p + 1) = %p\n",p + 1,*p + 1,*(p + 1));
    printf("**p + 1 = %d\n",**p + 1);
    printf("*(*p + 1) = %p\n",*(*p + 1));
    // printf("**(p + 1) = %d\n",**(p+1));// 没有输出值，因为p+1是无效的地址，然后**没找到数据。
    printf("end");
    
    return 0;
}
